package com.hspedu.codeblock;

public class CodeBlockDetail01 {
    public static void main(String[] args) {



        //1.创建对象实例时(new),
        //AA aa = new AA();
        //2.创建子类对象实例时，父类也会被加载，
        //  且父类先被加载，子类后被加载
        BB bb = new BB();
        System.out.println("========");
        System.out.println("Cat num1=" + Cat.num1);
        System.out.println("========");

        //static的代码块只会执行一次,static代码块在类加载的时候执行的
        DD dd = new DD();
        DD dd1 = new DD();

        //如果使用类的静态成员时，普通代码块是不会被执行的
        System.out.println(DD.n1);
    }
}

class DD{
    public static int n1 = 100;//静态属性
    static {
        System.out.println("DD的静态代码块被执行~~");
    }
    //普通代码块创建的时候才执行
    {
        System.out.println("DD的普通代码块被执行~~");
    }

}

class AA{
    private String name = "小龙";
    private static int age = 21;

    //静态代码块
    // 1.static的代码块只会执行一次
    // 2.普通代码块，new一个对象执行一次
    static {
        System.out.println("AA的静态代码块被执行~~");
    }

    public AA(String name) {
        this.name = name;
    }

    public AA() {
    }

}

class BB extends AA{
    //静态代码块
    static {
        System.out.println("BB的静态代码块被执行~~ ");
    }
}

class Animal{
    static{
        System.out.println("Animal的静态代码块被执行~~ ");
    }
}

class Cat extends Animal{
    public static int num1 = 10;
    static{
        System.out.println("Cat的静态代码被执行~~");
    }
}